<?php

namespace app\models;

use Yii;
use app\models\BaseGoodsHy;
/**
 * This is the model class for table "{{%cart}}".
 *
 * @property integer $id
 * @property integer $uid
 * @property integer $create_at
 * @property integer $status
 */
class Cart extends \yii\db\ActiveRecord {

    /**
     * @inheritdoc
     */
    public static function tableName() {
        return '{{%cart}}';
    }

    /**
     * @inheritdoc
     */
    public function rules() {
        return [
            [['uid', 'created_at', 'status'], 'required'],
            [['uid', 'created_at', 'status'], 'integer']
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels() {
        return [
            'id' => 'ID',
            'uid' => '用户id',
            'created_at' => '创建时间',
            'status' => '状态',
        ];
    }
    /**

     * author:孙健
     * create_time：2016年1月22日15:56:11
     * params：hyid 货源id quantity 购物车数量
     * return bool
     *      */
    private function checkQuantity($hyid,$quantity){
        $hy=BaseGoodsHy::findOne($hyid);
        if($hy->hysl<$quantity){
            return false;
        }else{
            return true;
        }
    }
    /**

     * author：孙健
     * create_time：2015年12月15日16:20:13
     * modify_time:2015年12月27日12:33:17
     * params array($data)添加的商品
     * params $uid 用户id
     * tips 批量加入购物车
     * return bool
     *      */
    public function addCart($data, $uid) {
        $id = $this->getCartId($uid);
        $supGoods = [];
        $model = new CartItem();
       
        foreach ($data as $v) {
            $cartItem = CartItem::checkCartItem($id, $v['hy_id']);

            if ($cartItem) {

                $cartItem->quantity = $cartItem->quantity + $v['quantity'];
                if(!$this->checkQuantity($v['hy_id'], $cartItem->quantity)){
                    return 1;
                }
                $cartItem->now_price = $v['price'];
                if ($cartItem->save()) {
                    
                } else {
                    return 2;
                }
            } else {
                $_model = clone $model;
                $_model->cart_id = $id;
                $_model->hy_id = $v['hy_id'];
                $_model->sup_id = $v['sup_id'];
                $_model->create_price = $v['price'];
                $_model->now_price = $v['price'];
                $_model->quantity = $v['quantity'];
                $_model->created_at = time();
                if ($_model->save()) {
                    
                } else {
                    return 2;
                }
            }
        }
        return 0;
    }

    /**

     * author：孙健
     * create_time：2015年12月15日16:22:50
     * params $uid 用户id
     * tips 获取购物车id
     * return 购物车id
     *      */
    static function getCartId($uid) {
        $model = static::findOne(["uid" => $uid]);

        if ($model) {

            return $model->id;
        } else {
            $cart = new Cart;
            $cart->uid = $uid;
            $cart->created_at = time();
            $cart->status = 1;
            $cart->save();
            return $cart->id;
        }
    }

    /**

     * author：孙健
     * create_time：2015年12月16日10:26:29
     * params $uid 用户id
     * tips 通过uid获取购物车列表
     * return 购物车列表 array
     *      */
    public function getCartListByUid($uid) {
        $id = $this->getCartId($uid);
        $cartItem = new CartItem;
        $list = $cartItem->find()->where(['cart_id' => $id])->joinWith('goodsHy')->orderBy('sup_id')->asArray()->all();

        return $list;
    }
    /**

     * author：孙健
     * create_time：2015年12月30日10:48:41
     * params $ids itmeids
     * tips 通过itmeids获取产品列表
     * return 产品列表 array
     *      */
    static function getCartListByIds($ids) {
   
        $cartItem = new CartItem;
        $list = $cartItem->find()->where("id in($ids)")->joinWith('goodsHy')->orderBy('sup_id')->asArray()->all();

        return $list;
    }
    /**

     * author：孙健
     * create_time：2015年12月16日13:48:29
     * params $cartItems 删除购物车商品id array 
     * tips 通过id删除购物车列表
     * return boolean
     *      */
    public function delCartItems($cartItems) {
        $cartItem = new CartItem;
        $condition = 'id in(' . $cartItems . ')';
        return $cartItem->deleteall($condition);
    }
     /**

     * author：孙健
     * create_time：2015年12月16日13:48:29
     * params $cartItems 删除购物车商品id array 
     * tips 通过id删除购物车列表
     * return boolean
     *      */
     static function delCartByItems($cartItems) {
        $cartItem = new CartItem;
        $cartItems=  implode(',', $cartItems);
        $condition = 'id in(' . $cartItems . ')';
        return $cartItem->deleteall($condition);
    }
    /**

     * author：孙健
     * create_time：2015年12月16日15:52:59
     * params $cartItems $uid 用户id
     * tips 清空购物车
     * return boolean
     *      */
    public function dropCart($uid) {
        $id = $this->getCartId($uid);
        $cartItem = new CartItem;
        $condition = 'cart_id=' . $id;
        return $cartItem->deleteall($condition);
    }

    /**

     * author：孙健
     * create_time：2015年12月16日16:04:25
     * params $cartItemId  $quantiyu 
     * tips 修改购物车数量
     * return boolean
     *      */
    public function modifyCart($cartItemId, $quantity) {
        $cartItem = CartItem::findOne($cartItemId);
        $cartItem->quantity = $quantity;
        return $cartItem->save();
    }

    /**

     * author：孙健
     * create_time：2015年12月17日14:16:36
     * 
     * tips 购物车商品数量
     * return int
     *      */
    static function CountCart() {
        if (Yii::$app->user->isGuest) {
            return 0;
        } else {
            $uid = Yii::$app->user->getId();
            $cart_id = static::getCartId($uid);
            return CartItem::find()->where("cart_id=" . $cart_id)->count();
        }
    }

    /**

     * author：孙健
     * create_time：2015年12月18日14:31:49
     * params $ids 
     * tips 获取所选商品价格
     * return float
     *      */
    public function GetPriceByIds($ids) {
        $ids = explode(",", $ids);
        $data = CartItem::findAll($ids);
        $price = 0;
        foreach ($data as $v) {
            $price+=$v->now_price * $v->quantity;
        }
        return $price;
    }

}
